module counter # (
  parameter DW = 4,                 //控制计数器输出值的位宽
  parameter N  = 10                 //控制计数值上限
) (
    input wire          clk        ,//10MHz的时钟
    input wire          rst_n      ,//异步复位，低电平有效
    input wire          clear      ,//清零按钮，上升沿有效
    input wire          state_start,//是否开始的状态，1为开始，0为暂停
    input wire          cin        ,//来自低位的进位
    output reg [DW-1:0] val        ,//输出的计数值，对应hr_h/hr_l/min_h/min_l/sec_h/sec_l
    output wire         cout        //进位输出
);
assign cout = ~rst_n ? 0 : (val==N-1)&&state_start&&cin;

always @(posedge clk or negedge  rst_n) 
begin
    if(~rst_n|clear) 
    begin 
        val   <= {DW{1'b0}};
    end
    else if (state_start&&cin)
    begin
        if (val==N-1) begin
            val  <= 0 ;
        end
        else begin
            val  <= val+1 ;
        end
    end
end

endmodule